﻿###################
# Claim Throne
# by Petter Vilberg
###################
claim_throne_interaction = {
	icon = icon_scheme_claim_throne
	category = interaction_category_vassal
	interface_priority = 268 # after Start Claimant Faction

	ai_targets = {
		ai_recipients = liege
	}
	
	auto_accept = yes
	use_diplomatic_range = no
	ignores_pending_interaction_block = yes


	scheme = claim_throne

	desc = claim_throne_interaction_desc
	
	is_shown = {
		exists = scope:actor.liege
		scope:recipient = scope:actor.liege
		scope:actor = {
			is_landless_adventurer = no
			highest_held_title_tier > tier_barony
			OR = {
				has_perk = meritocracy_perk
				AND = {
					is_diarch_of_target = scope:recipient
					scope:recipient = {
						NOT = { has_diarchy_parameter = can_be_instantly_dismissed }
					}
				}
				AND = {
					is_powerful_vassal_of = scope:recipient
					any_character_struggle = {
						involvement = involved
						has_struggle_phase_parameter = unlocks_claim_throne_for_powerful_vassals
						is_secondary_character_involvement_involved_trigger = {
							CHAR = scope:recipient
						}
					}
				}
				AND = {
					any_character_struggle = {
						involvement = involved
						has_struggle_phase_parameter = unlocks_claim_throne_for_all
						is_secondary_character_involvement_involved_trigger = {
							CHAR = scope:recipient
						}
					}
				}
				AND = {
					exists = title:d_sunni.holder
					is_vassal_of = title:d_sunni.holder
					any_character_struggle = {
						involvement = involved
						has_struggle_phase_parameter = unlocks_claim_throne_for_caliph_vassals
					}
				}
				has_character_flag = confederation_claim_throne
			}
		}
		NOT = { scope:recipient = scope:actor }	
	}

	is_valid_showing_failures_only = {
		scope:actor = {
			is_physically_able_adult = yes
#			can_start_scheme = {
#				target_character = scope:recipient
#				type = claim_throne
#			}
		}
	}

	# Scheme Starter Packages
	options_heading = schemes.t.agent_packages
	send_options_exclusive = yes
	## Balanced agents.
	send_option = {
		flag = agent_focus_balance
		current_description = claim_throne_interaction.tt.agent_focus_balance
	}
	## Focused on Success Chance.
	send_option = {
		flag = agent_focus_success
		current_description = claim_throne_interaction.tt.agent_focus_success
	}
	## Focused on Speed.
	send_option = {
		flag = agent_focus_speed
		current_description = claim_throne_interaction.tt.agent_focus_speed
	}
	## Focused on Secrecy.
	send_option = {
		flag = agent_focus_secrecy
		current_description = claim_throne_interaction.tt.agent_focus_secrecy
	}

	on_accept = {
		scope:actor = {
			stress_impact = {
				content = medium_stress_impact_gain
				just = medium_stress_impact_gain
			}
			send_interface_toast = {
				type = event_toast_effect_good
				title = claim_throne_interaction_toast
				left_icon = scope:actor
				right_icon = scope:recipient

				# Success.
				if = {
					limit = { scope:agent_focus_success ?= yes }
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = claim_throne
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Success.
						AGENT_1 = agent_diplomat
						AGENT_2 = agent_diplomat
						AGENT_3 = agent_scribe
						# Speed.
						AGENT_4 = agent_cleric
						# Secrecy.
						AGENT_5 = agent_justiciar
					}
				}
				# Speed.
				else_if = {
					limit = { scope:agent_focus_speed ?= yes }
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = claim_throne
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Speed.
						AGENT_1 = agent_cleric
						AGENT_2 = agent_socialite
						AGENT_3 = agent_gabbler
						# Success.
						AGENT_4 = agent_diplomat
						# Secrecy.
						AGENT_5 = agent_justiciar
					}
				}
				# Secrecy.
				else_if = {
					limit = { scope:agent_focus_secrecy ?= yes }
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = claim_throne
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Secrecy.
						AGENT_1 = agent_justiciar
						AGENT_2 = agent_justiciar
						AGENT_3 = agent_decoy
						# Success.
						AGENT_4 = agent_diplomat
						# Speed.
						AGENT_5 = agent_cleric
					}
				}
				# Balanced.
				else = {
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = claim_throne
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Success.
						AGENT_1 = agent_diplomat
						AGENT_2 = agent_scribe
						# Speed.
						AGENT_3 = agent_cleric
						AGENT_4 = agent_socialite
						# Secrecy.
						AGENT_5 = agent_decoy
					}
				}

				show_as_tooltip = {
					stress_impact = {
						content = medium_stress_impact_gain
						just = medium_stress_impact_gain
					}
				}
			}
		}

		# If we're a clan this interaction affects unity
		add_clan_unity_interaction_effect = {
			CHARACTER = scope:actor
			TARGET = scope:recipient
			VALUE = minor_unity_loss
			DESC = clan_unity_throne_claim.desc
			REVERSE_NON_HOUSE_TARGET = no
		}
	}
	
	ai_potential = {
		is_adult = yes
		highest_held_title_tier > tier_barony
		ai_greed >= medium_positive_ai_value
		learning >= medium_skill_rating
		intrigue >= mediocre_skill_rating
		trigger_if = {
			limit = {
				liege = { save_temporary_scope_as = struggle_liege }
				any_character_struggle = {
					involvement = involved
					has_struggle_phase_parameter = unlocks_claim_throne_for_all
					is_secondary_character_involvement_involved_trigger = {
						CHAR = scope:struggle_liege
					}
				}
			}
			is_powerful_vassal = yes
		}
		NOR = {
			has_trait = content
			opinion = {
				target = liege
				value >= high_positive_opinion
			}
			any_scheme = {
				OR = {
					scheme_type = murder
					scheme_type = abduct
					scheme_type = claim_throne
					scheme_type = fabricate_hook
					scheme_type = steal_back_artifact
				}
			}
		}
	}

	ai_frequency = 36

	ai_will_do = {
		base = 100

		# Agenda impact
		modifier = {
			scope:actor = {
				any_character_struggle = {
					involvement = involved
					is_struggle_type = iberian_struggle
				}
			}
			add = {
				value = 0
				if = {
					limit = {
						scope:actor = {
							any_character_struggle = {
								phase_has_catalyst = catalyst_gain_claim_on_title_fp2
							}
							has_character_flag = agenda_towards_escalation
						}
					}
					add = 200
				}
				else_if = {
					limit = {
						scope:actor = {
							any_character_struggle = {
								phase_has_catalyst = catalyst_gain_claim_on_title_fp2
							}
						}
					}
					add = -100
				}
			}
		}

		modifier = {
			scope:actor = {
				any_character_struggle = {
					involvement = involved
					is_struggle_type = persian_struggle
				}
			}
			add = {
				value = 0
				if = {
					limit = {
						scope:actor = {
							any_character_struggle = {
								phase_has_catalyst = catalyst_gain_claim_on_title_fp3
							}
							has_trait = fp3_struggle_detractor
						}
					}
					add = 200
				}
				else_if = {
					limit = {
						scope:actor = {
							any_character_struggle = {
								phase_has_catalyst = catalyst_gain_claim_on_title_fp3
							}
							has_trait = fp3_struggle_supporter
						}
						scope:recipient = {
							has_trait = fp3_struggle_detractor
						}
					}
					add = 100
				}
				else_if = {
					limit = {
						scope:actor = {
							any_character_struggle = {
								phase_has_catalyst = catalyst_gain_claim_on_title_fp3
							}
						}
					}
					add = -100
				}
			}
		}

		# Unity modifiers
		evaluate_action_decreasing_house_unity = {
			VALUE = 100
		}

		start_hostile_scheme_ai_base_modifiers = yes # At the end so Cowed can block it completely
	}
}


###################
# Fabricate Hook
# by Petter Vilberg
###################
fabricate_hook_interaction = {
	icon = icon_scheme_fabricate_hook
	category = interaction_category_hostile

	auto_accept = yes
	ignores_pending_interaction_block = yes

	scheme = fabricate_hook

	desc = fabricate_hook_interaction_desc
	
	is_shown = {
		scope:actor = {
			OR = {
				has_perk = truth_is_relative_perk
				AND = {
					has_trait = vengeful
					has_relation_rival = scope:recipient
				}
				AND = {
					any_character_struggle = {
						involvement = involved
						has_struggle_phase_parameter = unlocks_fabricate_hooks_for_all
						is_secondary_character_involvement_either_trigger = {
							CHAR = scope:recipient
						}
					}
				}
				AND = {
					government_has_flag = government_is_clan
					is_in_same_clan_as_trigger = { CHARACTER = scope:recipient }
					house = { has_house_unity_stage = competitive }	
				}	
			}
		}
		NOT = { scope:recipient = scope:actor }
	}

	is_valid = {
		NOT = { scope:actor = { has_hook = scope:recipient } }
		OR = {
			scope:actor = {
				OR = {
					has_perk = truth_is_relative_perk # To display that it's available because of the Perk
					AND = {
						has_trait = vengeful
						has_relation_rival = scope:recipient
					}
					AND = {
						any_character_struggle = {
							involvement = involved
							has_struggle_phase_parameter = unlocks_fabricate_hooks_for_all
							is_secondary_character_involvement_either_trigger = {
								CHAR = scope:recipient
							}
						}
					}
					AND = {
						government_has_flag = government_is_clan
						is_in_same_clan_as_trigger = { CHARACTER = scope:recipient }
						house = { has_house_unity_stage = competitive }	
					}	
				}
			}
		}
	}

	is_valid_showing_failures_only = {
		scope:actor = {
			is_physically_able_adult = yes
			can_start_scheme = {
				target_character = scope:recipient
				type = fabricate_hook
			}
		}
	}

	# Scheme Starter Packages
	options_heading = schemes.t.agent_packages
	send_options_exclusive = yes
	## Balanced agents.
	send_option = {
		flag = agent_focus_balance
		current_description = fabricate_hook_interaction.tt.agent_focus_balance
	}
	## Focused on Success Chance.
	send_option = {
		flag = agent_focus_success
		current_description = fabricate_hook_interaction.tt.agent_focus_success
	}
	## Focused on Speed.
	send_option = {
		flag = agent_focus_speed
		current_description = fabricate_hook_interaction.tt.agent_focus_speed
	}
	## Focused on Secrecy.
	send_option = {
		flag = agent_focus_secrecy
		current_description = fabricate_hook_interaction.tt.agent_focus_secrecy
	}

	on_accept = {
		scope:actor = {
			stress_impact = {
				just = medium_stress_impact_gain
				honest = medium_stress_impact_gain
				compassionate = minor_stress_impact_gain
			}
			send_interface_toast = {
				type = event_toast_effect_good
				title = fabricate_hook_interaction_toast
				left_icon = scope:actor
				right_icon = scope:recipient

				# Success.
				if = {
					limit = { scope:agent_focus_success ?= yes }
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = fabricate_hook
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Success.
						AGENT_1 = agent_outcast
						AGENT_2 = agent_diplomat
						AGENT_3 = agent_thief
						# Speed.
						AGENT_4 = agent_infiltrator
						# Secrecy.
						AGENT_5 = agent_lookout
					}
				}
				# Speed.
				else_if = {
					limit = { scope:agent_focus_speed ?= yes }
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = fabricate_hook
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Speed.
						AGENT_1 = agent_infiltrator
						AGENT_2 = agent_footpad
						AGENT_3 = agent_socialite
						# Success.
						AGENT_4 = agent_outcast
						# Secrecy.
						AGENT_5 = agent_lookout
					}
				}
				# Secrecy.
				else_if = {
					limit = { scope:agent_focus_secrecy ?= yes }
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = fabricate_hook
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Secrecy.
						AGENT_1 = agent_lookout
						AGENT_2 = agent_decoy
						AGENT_3 = agent_justiciar
						# Success.
						AGENT_4 = agent_outcast
						# Speed.
						AGENT_5 = agent_footpad
					}
				}
				# Balanced.
				else = {
					begin_scheme_with_agents_effect = {
						SCHEME_TYPE = fabricate_hook
						TARGET_TYPE = target_character
						TARGET_SCOPE = scope:recipient
						# Success.
						AGENT_1 = agent_outcast
						AGENT_2 = agent_thief
						# Speed.
						AGENT_3 = agent_infiltrator
						AGENT_4 = agent_footpad
						# Secrecy.
						AGENT_5 = agent_lookout
					}
				}
				show_as_tooltip = {
					stress_impact = {
						just = medium_stress_impact_gain
						honest = medium_stress_impact_gain
						compassionate = minor_stress_impact_gain
					}
				}
			}
		}
	}

	ai_targets = {
		ai_recipients = liege
		ai_recipients = vassals
	}

	ai_targets = {
		ai_recipients = neighboring_rulers
		ai_recipients = peer_vassals
		max = 10
	}
	
	ai_targets = {
		ai_recipients = courtiers
		max = 5
	}
	
	ai_targets = {
		ai_recipients = realm_characters
		ai_recipients = top_realm_domicile_owners
		max = 30
	}
	
	ai_potential = {
		is_adult = yes
		ai_greed >= low_positive_ai_value
		intrigue >= medium_skill_rating
		NOR = {
			has_trait = content
			any_scheme = {
				OR = {
					scheme_type = murder
					scheme_type = abduct
					scheme_type = claim_throne
					scheme_type = fabricate_hook
					scheme_type = steal_back_artifact
				}
			}
		}
	}
	
	ai_target_quick_trigger = {
		adult = yes
	}

	ai_frequency = 12

	ai_will_do = {
		base = 10

		modifier = {
			add = {
				value = 20
				if = {
					limit = {
						exists = scope:recipient.cp:councillor_spymaster
						scope:recipient.cp:councillor_spymaster = { intrigue < 10 }
					}
					add = 50
				}
			}
			
			scope:recipient = {
				is_vassal_of = scope:actor
				vassal_contract_has_modifiable_obligations = yes
			}
		}
		
		modifier = {
			add = -50
			
			opinion = {
				target = scope:recipient
				value >= high_positive_opinion
			}
		}
		
		modifier = {
			add = -40
			
			scope:recipient = {
				is_playable_character = yes
				NOT = {
					is_vassal_of = scope:actor
				}
			}
		}
		
		modifier = {
			add = 50
			
			scope:recipient = {
				is_playable_character = no
				OR = {
					liege = scope:actor.liege
					liege = {
						OR = {
							has_relation_rival = scope:actor
							has_relation_nemesis = scope:actor
						}
					}
				}
			}
		}
		
		modifier = {
			factor = 0
			
			scope:recipient = {
				has_council_position = councillor_spymaster
			}
		}
		start_hostile_scheme_ai_base_modifiers = yes # At the end so Cowed can block it completely
	}
}


###################
# Demand Payment
# by Petter Vilberg
###################
demand_payment_interaction = {
	category = interaction_category_friendly
	icon = icon_gold

	auto_accept = yes
	use_diplomatic_range = yes
	interface_priority = 35

	desc = demand_payment_interaction_desc

	is_shown = {
		scope:actor = {
			OR = {
				has_perk = golden_obligations_perk
				AND = {
					any_character_struggle = {
						involvement = involved
						has_struggle_phase_parameter = unlocks_demand_payments_for_all
						is_secondary_character_involvement_either_trigger = {
							CHAR = scope:recipient
						}
					}
				}
			}
		}
		scope:recipient = {
			is_ai = yes
		}
		NOT = { scope:recipient = scope:actor }
	}

	is_valid_showing_failures_only = {
		scope:actor = {
			is_physically_able_adult = yes
			NOT = {
				is_at_war_with = scope:recipient
			}
		}
		scope:recipient = {
			is_imprisoned = no
		}
		scope:recipient = {
			custom_description = {
				text = demand_payment_too_little_gold
				gold >= 1
			}
		}
	}

	is_valid = {
		scope:actor = {
			has_usable_hook = scope:recipient
		}
	}

	is_highlighted = {
		scope:actor = {
			has_usable_hook = scope:recipient
		}
	}

	on_accept = {
		if = {
			limit = {
				scope:recipient.gold < scope:recipient.golden_obligation_value
			}
			custom_tooltip = demand_payment_too_little_gold_tt
		}
		scope:actor = {
			send_interface_toast = {
				title = demand_payment_interaction_message
				left_icon = scope:recipient

				scope:actor = {
					use_hook = scope:recipient
				}
				scope:recipient = {
					if = {
						pay_short_term_gold = {
							target = scope:actor
							gold = golden_obligation_value
						}
						limit = {
							gold > golden_obligation_value
						}
					}
					else = {
						pay_short_term_gold = {
							target = scope:actor
							gold = {
								value = scope:recipient.gold
								floor = yes
							}
						}
					}
				}
			}
			stress_impact = {
				generous = medium_stress_impact_gain
			}
		}

		# If we're a clan this interaction affects unity
		add_clan_unity_interaction_effect = {
			CHARACTER = scope:actor
			TARGET = scope:recipient
			VALUE = minor_unity_loss
			DESC = clan_unity_demand_payment.desc
			REVERSE_NON_HOUSE_TARGET = no
		}
	}
	
	ai_potential = {
		NOT = {
			has_trait = generous
		}
		OR = {
			ai_greed >= low_positive_ai_value
			is_at_war = yes
		}
	}
	
	ai_target_quick_trigger = {
		adult = yes
	}
	
	ai_targets = {
		ai_recipients = hooked_characters
	}
	
	ai_frequency = 36
	
	ai_will_do = {
		base = 100

		# Unity modifiers
		evaluate_action_increasing_house_unity = {
			VALUE = -100
		}

		modifier = { #ai won't use the interaction if they'll get nothing out of it
			factor = 0
			scope:recipient.gold < 8
		}
		
		modifier = {
			factor = 0
			scope:actor = {
				OR = {
					has_relation_friend = scope:recipient
					has_relation_lover = scope:recipient
					has_relation_best_friend = scope:recipient
					has_relation_soulmate = scope:recipient
				}
			}
		}
	}
}



##################
# Buy Claim
# by Petter Vilberg
##################
buy_claim_interaction = {
	category = interaction_category_diplomacy
	icon = vassal_claim_liege_title_interaction

	desc = buy_claim_interaction_desc
	target_type = title
	target_filter = recipient_domain_titles
	ignores_pending_interaction_block = yes

	is_shown = {
		scope:actor = {
			is_landless_adventurer = no
			OR = {
				has_perk = sanctioned_loopholes_perk
				AND = {
					any_character_struggle = {
						involvement = involved
						has_struggle_phase_parameter = unlocks_buy_claim_for_all
						is_secondary_character_involvement_either_trigger = {
							CHAR = scope:recipient
						}
					}
				}
			}
			NOT = { target_is_liege_or_above = scope:recipient }
		}
		NOT = {
			scope:actor = scope:recipient
			AND = {
				scope:recipient = scope:actor.faith.religious_head
				scope:actor.faith = {
					NOT = { has_doctrine = doctrine_theocracy_temporal }
				}
			}
		}
		scope:recipient = {
			is_playable_character = yes
			primary_title.tier > tier_barony
			NOT = {	
				target_is_liege_or_above = scope:actor
			}
		}
	}

	can_be_picked_title = {
		scope:target = {
			tier >= tier_county
		}
	}
	
	is_valid_showing_failures_only = {
		trigger_if = { # Can't request on titles you already have a claim on
			limit = {
				scope:target ?= {
					any_claimant = { this = scope:actor }
				}
			}
			custom_description = {
				text = buy_claim_has_pressed_claim_already
				always = no
			}
		}
		trigger_if = { # Can't request claims on baronies
			limit = {
				scope:target ?= { tier = tier_barony }
			}
			custom_description = {
				text = buy_claim_has_pressed_claim_already
				always = no
			}
		}
		trigger_if = { # Can't buy Kingdom or Empire Claims if you're a King
			limit = {
				scope:target ?= { tier = tier_kingdom }
				scope:actor.highest_held_title_tier >= tier_kingdom
			}
			custom_description = {
				text = buy_claim_no_king_or_emperor_kingdom
				always = no
			}
		}
		trigger_if = { # Can't buy Empire Claims if you're an Emperor
			limit = {
				scope:target ?= { tier = tier_empire }
				scope:actor.highest_held_title_tier >= tier_empire
			}
			custom_description = {
				text = buy_claim_no_emperor_empire
				always = no
			}
		}
		trigger_if = { # Can't buy claims on head of faith titles
			limit = {
				scope:target ?= { is_head_of_faith = yes }
			}
			custom_description = {
				text = buy_claim_no_religious_titles
				always = no
			}
		}
		trigger_if = { # Can't buy claims on noble families
			limit = {
				scope:target ?= { is_noble_family_title = yes }
			}
			custom_description = {
				text = buy_claim_no_noble_family_titles
				always = no
			}
		}
		trigger_if = { # Can't buy claims on landless adventurer titles
			limit = {
				scope:target ?= { has_variable = adventurer_creation_reason }
			}
			custom_description = {
				text = buy_claim_no_landless_adventurer_title
				always = no
			}
		}
		scope:actor = { # Variable piety cost depending on tier
			trigger_if = {
				limit = {
					exists = scope:target
					scope:target = {
						tier = tier_county
					}
				}
				piety >= {
					value = minor_buy_claim_piety_value
					if = {
						limit = {
							government_allows = administrative
						}
						multiply = 1.5
					}
				}
			}
			trigger_if = {
				limit = {
					exists = scope:target
					scope:target = {
						tier = tier_duchy
					}
				}
				piety >= {
					value = medium_buy_claim_piety_value
					if = {
						limit = {
							government_allows = administrative
						}
						multiply = 1.5
					}
				}
			}
			trigger_if = {
				limit = {
					exists = scope:target
					scope:target = {
						tier = tier_kingdom
					}
				}
				piety >= {
					value = major_buy_claim_piety_value
					if = {
						limit = {
							government_allows = administrative
						}
						multiply = 1.5
					}
				}
			}
			trigger_if = {
				limit = {
					exists = scope:target
					scope:target = {
						tier = tier_empire
					}
				}
				piety >= {
					value = massive_buy_claim_piety_value
					if = {
						limit = {
							government_allows = administrative
						}
						multiply = 1.5
					}
				}
			}
		}
		scope:recipient = { is_busy_in_events_localised = yes }
		scope:recipient = { NOT = { has_strong_hook = scope:actor } }
	}
	
	auto_accept = yes
	
	on_accept = {
		scope:actor = {
			send_interface_toast = {
				type = event_toast_effect_good
				title = buy_claim_interaction.message
				left_icon = scope:actor
				right_icon = scope:recipient
				add_piety = {
					value = 0
					if = {
						limit = {
							scope:target = {
								tier = tier_county
							}
						}
						add = minor_buy_claim_piety_loss
					}
					if = {
						limit = {
							scope:target = {
								tier = tier_duchy
							}
						}
						add = medium_buy_claim_piety_loss
					}
					if = {
						limit = {
							scope:target = {
								tier = tier_kingdom
							}
						}
						add = major_buy_claim_piety_loss
					}
					if = {
						limit = {
							scope:target = {
								tier = tier_empire
							}
						}
						add = massive_buy_claim_piety_loss
					}
					if = {
						limit = {
							government_allows = administrative
						}
						multiply = 1.5
					}
				}
				add_unpressed_claim = scope:target
			}
			stress_impact = {
				just = medium_stress_impact_gain
				honest = medium_stress_impact_gain
			}
		}
		scope:recipient = {
			add_opinion = {
				target = scope:actor
				modifier = claimed_my_title_opinion
				opinion = -40
			}
			trigger_event = perk_interaction.0002
		}

		# If we're a clan this interaction affects unity
		add_clan_unity_interaction_effect = {
			CHARACTER = scope:actor
			TARGET = scope:recipient
			VALUE = minor_unity_loss
			DESC = clan_unity_bought_claim.desc
			REVERSE_NON_HOUSE_TARGET = no
		}
	}
}



##################
# Challenge Rival
# by Ewan Cowhig Croft
##################

challenge_to_single_combat_interaction = {
	icon = icon_combat
	interface_priority = 30
	common_interaction = yes
	category = interaction_category_hostile
	ai_maybe = yes
	ai_max_reply_days = 0
	popup_on_receive = yes
	pause_on_receive = yes
	
	name = {
		first_valid = {
			triggered_desc = {
				trigger = {
					scope:actor = {
						government_has_flag = government_is_nomadic
					}
					scope:recipient = {
						government_has_flag = government_is_nomadic
					}
				}
				desc = challenge_to_single_combat_nomadic_interaction
			}
			desc = challenge_to_single_combat_interaction
		}
	}
	
	desc = challenge_to_single_combat_interaction_desc

	greeting = negative
	notification_text = REQUEST_TRIAL_BY_COMBAT_TEXT

	is_shown = {
		# First, check for the perk.
		scope:actor = { can_challenge_rival_to_single_combat_trigger = yes }
		# Then, look to see if this character is a rival.
		OR = {
			scope:actor = { has_relation_rival = scope:recipient }
			AND = { # If you are a Nomad you can challenge martial non-close family characters
				scope:actor = {
					government_has_flag = government_is_nomadic
					has_perk = stalwart_leader_perk
				}
				scope:recipient = {
					government_has_flag = government_is_nomadic
					NOT = { is_close_family_of = scope:actor }
					can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:actor }
				}
			}
		}
		# Can't duel yourself.
		NOT = { scope:actor = scope:recipient }
	}

	is_valid_showing_failures_only = {
		# Calc some stuff that might invalidate elsewhere before the bout is sorted.
		rival_single_combat_shown_and_not_invalid_trigger = yes
		# Scope:recipient must be able to fight personally.
		scope:recipient = { can_start_single_combat_trigger = yes }
		# Scope:recipient must not be banned from single combat.
		scope:recipient = {
			custom_description = {
				text = fp1_tbc_recipient_banned_from_combat
				can_start_single_combat_banned_checks_trigger = no
			}
		}
		# Neither of the characters can be imprisoned.
		scope:actor = { is_imprisoned = no }
		scope:recipient = { is_imprisoned = no }
	}

	can_send = {
		scope:actor = {
			custom_description = {
				text = "character_interactions_hostile_actions_disabled_delay"
				NOT = { has_character_flag = flag_hostile_actions_disabled_delay }
			}
		}
	}
	
	cost = { prestige = medium_prestige_value }
	cooldown = { years = 5 }
	cooldown_against_recipient = { years = 10 }

	on_send = {
		scope:actor = {
			add_character_flag = {
				flag = flag_hostile_actions_disabled_delay
				days = 10
			}
		}
	}

	on_accept = {
		# Set up the bout immediately.
		## First inform.
		scope:actor = {
			custom_tooltip = challenge_to_single_combat_interaction.enter_non_lethal_bout.tt
			custom_tooltip = challenge_to_single_combat_interaction.victor_gets.tt
			custom_tooltip = challenge_to_single_combat_interaction.loser_gets.tt
		}
		## Finally, begin.
		configure_start_single_combat_effect = {
			SC_INITIATOR = scope:actor
			SC_ATTACKER = scope:actor
			SC_DEFENDER = scope:recipient
			FATALITY = no
			FIXED = no
			LOCALE = terrain_scope
			OUTPUT_EVENT = perk_interaction.0101
			INVALIDATION_EVENT = perk_interaction.0102
		}

		# If we're a clan this interaction affects unity
		if = {
			limit = {
				scope:actor = {
					exists = scope:actor.house
					house = { # But only if we have high unity!
						OR = {
							has_house_unity_stage = harmonious
							has_house_unity_stage = friendly
						}
					}
				}
			}
			add_clan_unity_interaction_effect = {
				CHARACTER = scope:actor
				TARGET = scope:recipient
				VALUE = medium_unity_loss
				DESC = clan_unity_challenge_to_combat.desc
				REVERSE_NON_HOUSE_TARGET = no
			}
			custom_description_no_bullet = { text = active_unity_level_description_tt }
		}
	}

	on_decline = {
		# Scope:actor decline processing.
		scope:actor = {
			# Inform them of the decline & scope:recipient loses some prestige.
			send_interface_toast = {
				type = event_toast_effect_bad
				title = challenge_to_single_combat_interaction.challenge_rejected.t
				left_icon = scope:recipient
				right_icon = scope:actor
				scope:recipient = { add_prestige = medium_prestige_loss }
				show_as_tooltip = {
					add_prestige = medium_prestige_value
				}
			}
			hidden_effect = {
				add_prestige_no_experience = medium_prestige_value
			}
			# Cooldown is removed.
			hidden_effect = { remove_interaction_cooldown = challenge_to_single_combat_interaction }
			# Clear up hostile actions flag.
			if = {
				limit = {
					has_character_flag = flag_hostile_actions_disabled_delay
				}
				remove_character_flag = flag_hostile_actions_disabled_delay
			}
		}
	}

	auto_accept = no

	ai_accept = {
		base = 0 # Try to make it 0 for most interactions

		# Relative fightan ability.
		modifier = {
			desc = CTSC_RELATIVE_PROWESS
			scope:actor.prowess < scope:recipient.prowess
			add = {
				value = scope:recipient.prowess
				subtract = scope:actor.prowess
				multiply = 2
			}
		}
		modifier = {
			desc = CTSC_RELATIVE_PROWESS
			scope:recipient.prowess < scope:actor.prowess
			add = {
				value = scope:actor.prowess
				subtract = scope:recipient.prowess
				multiply = -2
			}
		}
		# Weight up for personality values.
		ai_value_modifier = {
			who = scope:recipient
			ai_boldness = {
				if = {
					limit = {
						scope:recipient = {
							ai_boldness > 0
							ai_rationality < 0
						}
					}
					value = 2
				}
				else_if = {
					limit = {
						scope:recipient = {
							NOT = { ai_boldness = 0 }
						}
					}
					value = 1
				}
			}
			ai_vengefulness = {
				if = {
					limit = {
						scope:recipient = {
							NOT = { ai_vengefulness = 0 }
						}
					}
					value = 0.75
				}
			}
			ai_honor = {
				if = {
					limit = {
						scope:recipient = {
							ai_honor > 0
						}
					}
					value = 0.5
				}
			}
		}
		# Apply tier differences.
		## King -> Baron.
		modifier = {
			desc = AI_REFUSAL_RANK_DIFFERENCE
			scope:actor = {
				tier_difference = {
					target = scope:recipient
					value >= 4
				}
			}
			add = 15
		}
		## Duke -> Baron.
		modifier = {
			desc = AI_REFUSAL_RANK_DIFFERENCE
			scope:actor = {
				tier_difference = {
					target = scope:recipient
					value = 3
				}
			}
			add = 10
		}
		## Count -> Baron.
		modifier = {
			desc = AI_REFUSAL_RANK_DIFFERENCE
			scope:actor = {
				tier_difference = {
					target = scope:recipient
					value = 2
				}
			}
			add = 5
		}
		## King <- Baron.
		modifier = {
			desc = AI_REFUSAL_RANK_DIFFERENCE
			scope:actor = {
				tier_difference = {
					target = scope:recipient
					value = -2
				}
			}
			add = -10
		}
		## Duke <- Baron.
		modifier = {
			desc = AI_REFUSAL_RANK_DIFFERENCE
			scope:actor = {
				tier_difference = {
					target = scope:recipient
					value = -3
				}
			}
			add = -20
		}
		## Count <- Baron.
		modifier = {
			desc = AI_REFUSAL_RANK_DIFFERENCE
			scope:actor = {
				tier_difference = {
					target = scope:recipient
					value <= -4
				}
			}
			add = -30
		}
		# Nemesis modifier.
		modifier = {
			desc = offer_vassalization_interaction_aibehavior_nemesis_tt
			trigger = {
				scope:recipient = {
					has_relation_nemesis = scope:actor
				}
			}
			add = 50
		}

		# Unity modifiers
		evaluate_action_decreasing_house_unity = {
			VALUE = 100
		}
	}

	# AI
	ai_potential = {
		can_challenge_rival_to_single_combat_trigger = yes
		NOT = { has_trait = craven }
		num_of_relation_rival > 0
		is_imprisoned = no
		can_start_single_combat_trigger = yes
	}
	
	ai_target_quick_trigger = {
		adult = yes
	}
	ai_targets = {
		ai_recipients = scripted_relations
	}

	ai_frequency = 60

	ai_will_do = {
		base = -50
		
		# Factor for personality (excluding realism).
		modifier = {
			add = {
				value = ai_boldness
				multiply = 1
			}
		}
		modifier = { add = ai_vengefulness }
		modifier = {
			add = {
				value = ai_energy
				multiply = -0.25
			}
		}
		
		# To prevent Nomads from being constantly injured everywhere
		modifier = {
			NOT = {
				scope:recipient = { has_relation_rival = scope:actor }
			}
			add = -100
		}
		modifier = {
			scope:actor = { has_any_good_relationship_with_character_trigger = { CHARACTER = scope:recipient } }
			add = -100
		}

		# Unity modifiers
		evaluate_action_decreasing_house_unity = {
			VALUE = 100
		}

		# Don't challenge kinslayer-counting family, unless they're your nemesis.
		modifier = {
			scope:actor = {
				murdering_character_is_kinslaying_in_faith_trigger = {
					CHARACTER = scope:recipient
					FAITH = scope:actor.faith
				}
			}
			scope:recipient = {
				NOT = { has_relation_nemesis = scope:actor }
			}
			add = -1000
		}
		# Don't challenge your spouse, unless they're your nemesis.
		modifier = {
			scope:recipient = {
				is_spouse_of = scope:actor
				NOT = { has_relation_nemesis = scope:actor }
			}
			add = -1000
		}
		# Don't challenge people hopelessly out of your league unless you're really, really not seeing things clearly.
		modifier = {
			scope:actor = {
				prowess_diff = {
					target = scope:recipient
					value <= -15
				}
				ai_rationality >= high_negative_ai_value
			}
			add = -1000
		}
	}
}
